package com.zjcloud.jwgl.mapper;

import java.util.List;
import com.zjcloud.jwgl.domain.AcConstraintViolation;

/**
 * 约束违反记录Mapper接口
 * 
 * @author zjcloud
 * @date 2024-01-01
 */
public interface AcConstraintViolationMapper 
{
    /**
     * 查询约束违反记录
     * 
     * @param id 约束违反记录主键
     * @return 约束违反记录
     */
    public AcConstraintViolation selectAcConstraintViolationById(Long id);

    /**
     * 查询约束违反记录列表
     * 
     * @param acConstraintViolation 约束违反记录
     * @return 约束违反记录集合
     */
    public List<AcConstraintViolation> selectAcConstraintViolationList(AcConstraintViolation acConstraintViolation);

    /**
     * 根据排课记录ID查询违反记录列表
     * 
     * @param scheduleId 排课记录ID
     * @return 约束违反记录集合
     */
    public List<AcConstraintViolation> selectViolationsByScheduleId(Long scheduleId);

    /**
     * 根据约束条件ID查询违反记录列表
     * 
     * @param constraintId 约束条件ID
     * @return 约束违反记录集合
     */
    public List<AcConstraintViolation> selectViolationsByConstraintId(Long constraintId);

    /**
     * 查询未解决的违反记录列表
     * 
     * @return 约束违反记录集合
     */
    public List<AcConstraintViolation> selectUnresolvedViolations();

    /**
     * 根据违反类型查询违反记录列表
     * 
     * @param violationType 违反类型(HARD-硬约束违反 SOFT-软约束违反)
     * @return 约束违反记录集合
     */
    public List<AcConstraintViolation> selectViolationsByType(String violationType);

    /**
     * 根据违反级别查询违反记录列表
     * 
     * @param violationLevel 违反级别(1-严重 2-一般 3-轻微)
     * @return 约束违反记录集合
     */
    public List<AcConstraintViolation> selectViolationsByLevel(Integer violationLevel);

    /**
     * 查询严重违反记录列表
     * 
     * @return 约束违反记录集合
     */
    public List<AcConstraintViolation> selectSevereViolations();

    /**
     * 查询硬约束违反记录列表
     * 
     * @return 约束违反记录集合
     */
    public List<AcConstraintViolation> selectHardViolations();

    /**
     * 新增约束违反记录
     * 
     * @param acConstraintViolation 约束违反记录
     * @return 结果
     */
    public int insertAcConstraintViolation(AcConstraintViolation acConstraintViolation);

    /**
     * 修改约束违反记录
     * 
     * @param acConstraintViolation 约束违反记录
     * @return 结果
     */
    public int updateAcConstraintViolation(AcConstraintViolation acConstraintViolation);

    /**
     * 删除约束违反记录
     * 
     * @param id 约束违反记录主键
     * @return 结果
     */
    public int deleteAcConstraintViolationById(Long id);

    /**
     * 批量删除约束违反记录
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAcConstraintViolationByIds(Long[] ids);

    /**
     * 根据排课记录ID删除违反记录
     * 
     * @param scheduleId 排课记录ID
     * @return 结果
     */
    public int deleteViolationsByScheduleId(Long scheduleId);

    /**
     * 根据约束条件ID删除违反记录
     * 
     * @param constraintId 约束条件ID
     * @return 结果
     */
    public int deleteViolationsByConstraintId(Long constraintId);

    /**
     * 批量新增约束违反记录
     * 
     * @param violations 约束违反记录列表
     * @return 结果
     */
    public int batchInsertAcConstraintViolation(List<AcConstraintViolation> violations);

    /**
     * 批量更新约束违反记录
     * 
     * @param violations 约束违反记录列表
     * @return 结果
     */
    public int batchUpdateAcConstraintViolation(List<AcConstraintViolation> violations);

    /**
     * 标记违反记录为已解决
     * 
     * @param id 违反记录ID
     * @param resolvedBy 解决人
     * @return 结果
     */
    public int markViolationAsResolved(Long id, String resolvedBy);

    /**
     * 批量标记违反记录为已解决
     * 
     * @param ids 违反记录ID数组
     * @param resolvedBy 解决人
     * @return 结果
     */
    public int batchMarkViolationsAsResolved(Long[] ids, String resolvedBy);

    /**
     * 统计违反记录数量
     * 
     * @param acConstraintViolation 查询条件
     * @return 统计结果
     */
    public int countViolations(AcConstraintViolation acConstraintViolation);

    /**
     * 统计未解决的违反记录数量
     * 
     * @return 统计结果
     */
    public int countUnresolvedViolations();

    /**
     * 统计硬约束违反记录数量
     * 
     * @return 统计结果
     */
    public int countHardViolations();

    /**
     * 统计严重违反记录数量
     * 
     * @return 统计结果
     */
    public int countSevereViolations();

    /**
     * 根据排课记录ID统计违反记录数量
     * 
     * @param scheduleId 排课记录ID
     * @return 统计结果
     */
    public int countViolationsByScheduleId(Long scheduleId);

    /**
     * 根据约束条件ID统计违反记录数量
     * 
     * @param constraintId 约束条件ID
     * @return 统计结果
     */
    public int countViolationsByConstraintId(Long constraintId);
}